package timer

import (
	"github.com/Sir-yuChen/funAnalyse/global"
	"github.com/Sir-yuChen/funAnalyse/model"
	"github.com/Sir-yuChen/funAnalyse/service/timer"
	"github.com/robfig/cron/v3"
	"go.uber.org/zap"
	"strconv"
)

/*
	初始化定时任务
		1.Cron定时任务	github.com/robfig/cron/v3
*/

func CronTimerInit() {

	var timers []model.StockTImer
	err := global.GVA_DB.Model(model.StockTImer{}).Where("status = ?  ", "Y").Find(&timers).Error
	if err != nil {
		global.GVA_LOG.Error("初始化加载定时任务失败》》》1.查询定时任务详情异常", zap.Any("timers", timers))
		return
	}
	var option []cron.Option
	var successCount = 0
	var failCount = 0
	option = append(option, cron.WithSeconds()) //精确到秒
	//option = append(option, cron.WithChain(cron.SkipIfStillRunning(cron.DefaultLogger)))                                //函数没执行完就跳过本次函数
	//option = append(option, cron.WithLogger(cron.VerbosePrintfLogger(log.New(os.Stdout, "cron-Log: ", log.LstdFlags)))) //中间件 全局 log	只要实现Logger接口就可以自定义日志Logger
	/*
		Recover 捕获内部Job产生的 panic；
		DelayIfStillRunning 触发时，如果上一次任务还未执行完成（耗时太长），则等待上一次任务完成之后再执行
		SkipIfStillRunning 触发时，如果上一次任务还未完成，则跳过此次执行
	*/
	//option = append(option, cron.WithChain(cron.Recover(cron.VerbosePrintfLogger(log.New(os.Stdout, "cron-Log: ", log.LstdFlags))))) //中间件 全局 log

	/*
			//指定时区
		   loc,_ := time.LoadLocation("America/Los_Angeles")
			option = append(option, cron.WithLocation(loc))
	*/
	for _, v := range timers {
		//注意导入service包
		err := timer.AddTaskJob(v, nil, option...)
		if err != nil {
			failCount++
			global.GVA_LOG.Error("定时任务添加失败", zap.Any("StockTImer", v))
		} else {
			successCount++
			global.GVA_LOG.Info("定时任务添加成功", zap.Any("StockTImer", v))
		}
	}
	global.GVA_LOG.Info("初始化定时任务添加完成", zap.String("successCount", strconv.Itoa(successCount)), zap.Any("failCount", strconv.Itoa(failCount)))
}
